﻿using System.Runtime;
using System.Globalization;

namespace System.Reflection.Emit
{
    public sealed class MethodBuilder : MethodInfo
    {
        private struct SymCustomAttr
        {
            public string m_name;
            public byte[] m_data;
            public SymCustomAttr(string name, byte[] data)
            {
                this.m_name = name;
                this.m_data = data;
            }
        }

        public override string Name
        {
            [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
            get { return null; }
        }

        public override Type DeclaringType
        {
            get { return null; }
        }

        public override ICustomAttributeProvider ReturnTypeCustomAttributes
        {
            get { return null; }
        }

        public override Type ReflectedType
        {
            get { return null; }
        }

        public override MethodAttributes Attributes
        {
            [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
            get { return MethodAttributes.Abstract; }
        }

        public override CallingConventions CallingConvention
        {
            [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
            get { return CallingConventions.Any; }
        }

        public override RuntimeMethodHandle MethodHandle
        {
            get { return new RuntimeMethodHandle(); }
        }

        public override bool IsSecurityCritical
        {
            get { return false; }
        }

        public override bool IsSecuritySafeCritical
        {
            get { return false; }
        }

        public override bool IsSecurityTransparent
        {
            get { return false; }
        }

        public override Type ReturnType
        {
            [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
            get { return null; }
        }

        public override ParameterInfo ReturnParameter
        {
            get { return null; }
        }

        public override bool IsGenericMethodDefinition
        {
            [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
            get { return false; }
        }

        public override bool ContainsGenericParameters
        {
            get { return false; }
        }

        public override bool IsGenericMethod
        {
            get { return false; }
        }

        public bool InitLocals
        {
            get { return false; }
            set { }
        }

        public string Signature
        {
            get { return null; }
        }

        public override bool Equals(object obj)
        {
            return false;
        }

        public override int GetHashCode()
        {
            return 0;
        }

        public override object Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
        {
            return null;
        }

        public override MethodImplAttributes GetMethodImplementationFlags()
        {
            return MethodImplAttributes.IL;
        }

        public override MethodInfo GetBaseDefinition()
        {
            return this;
        }

        public override ParameterInfo[] GetParameters()
        {
            return null;
        }

        public override object[] GetCustomAttributes(bool inherit)
        {
            return null;
        }

        public override object[] GetCustomAttributes(Type attributeType, bool inherit)
        {
            return null;
        }

        public override bool IsDefined(Type attributeType, bool inherit)
        {
            return false;
        }

        public override MethodInfo GetGenericMethodDefinition()
        {
            return null;
        }

        public override Type[] GetGenericArguments()
        {
            return null;
        }

        public override MethodInfo MakeGenericMethod(params Type[] typeArguments)
        {
            return null;
        }

        public void SetParameters(params Type[] parameterTypes)
        {
        }

        public void SetReturnType(Type returnType)
        {
        }

        public void SetSignature(Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers)
        {
        }

        public void SetSymCustomAttribute(string name, byte[] data)
        {
        }

        public void CreateMethodBody(byte[] il, int count)
        {
        }

        public void SetImplementationFlags(MethodImplAttributes attributes)
        {
        }

        public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
        {
        }
    }
}
